//ts推断不出来的类型默认用string类型
function getVal<T=string>(param:T):T{
    return param
}

console.log(getVal<string>('hello'));

console.log(getVal(10));

//获取数组最小值的方法  [1,2,3,4]  ['a','c','d']

// function getMin<T>(arr:T[]):T{
//     let min:T = arr[0];  //第0个当成最小值

//     for(let i = 0;i<arr.length;i++){
//         if(min > arr[i]){
//             min = arr[i]
//         }
//     }

//     return min
// }

// console.log(getMin<string>(['a','c','d']));  //a

// console.log(getMin<number>([1,3,6])); //1

//创建一个数组长度为m，元素都为value

function createArray<T>(m:number,value:T):T[]{
    let arr:T[] = [];
    for(let i = 0;i < m;i++){
        arr.push(value)
    }
    return arr;
}

console.log(createArray<string>(3,'a'));

//交换数组的值  多个类型参数

function change<T,U>(tuple:[T,U]):[U,T]{
     return [tuple[1],tuple[0]]   
}

console.log(change<string,number>(['a',1]))

//泛型类

class GetMin<T>{
    public list:T[];
    constructor(){
        this.list = [];
    }

    add(param:T):void{
        this.list.push(param);
    }

    getMin():T{
        let min:T = this.list[0];  //第0个当成最小值

        for(let i = 0;i<this.list.length;i++){
            if(min > this.list[i]){
                min = this.list[i]
            }
        }

        return min
    }
}

let p12 = new GetMin();

p12.add(1);
p12.add(2);
p12.add(3);

console.log(p12.getMin());

interface Person1{
    name:string,
    age:number
}

interface Animal1{
    type:string
}

function create<T>(what:T):T{
    return what
}

console.log(create<Person1>({name:'lili',age:19}))

console.log(create<Animal1>({type:'cat'}))


/**

作业：

    1.购物车案例  react做  复习语法，路由，redux ==== 1.5

    2.猫眼  react做 =====  1.5

    3.mvvm js转成ts文件 =====  1

    4.每天3~5道面试题

 */